﻿#ifndef __SDL_PLATFORM_H__
#define __SDL_PLATFORM_H__

#include "../GAF/GAF.h"

#include "SDL_Include.h"
#include "SDL_Define.h"

/// SDL图像引擎平台类
class SDL_CPlatform : public GAF_CPlatform
{
public:
	SDL_CPlatform();
	~SDL_CPlatform();

public:
	// 平台函数
	/**
	 *  @name 平台函数
	 */
	bool			InitPlatform(GAF_CBundle* pParam = NULL);
	bool			DestroyPlatform();

	// 窗口函数
	/**
	 *  @name 窗口函数
	 */
	GAF_DWindowHandle	NewWindow(GAF_SCreateWindow& cw);
	bool			ShowWindow(GAF_DWindowHandle hWindow);
	bool			HideWindow(GAF_DWindowHandle hWindow);
	void			RanderWindow(GAF_DWindowHandle hWindow);
	void			FlipWindow(GAF_DWindowHandle hWindow);
	bool			DeleteWindow(GAF_DWindowHandle hWindow);
	void			SetWindowTitle(GAF_DWindowHandle hWindow, _STRING strTitle);

	// 事件函数
	/**
	 *  @name 事件函数
	 */
	bool			GetCommand(GAF_DWindowHandle hWindow, GAF_SCommand& cmdGet);
	void			CleanCommandBuffer(GAF_DWindowHandle hWindow);

	// 画布函数
	/**
	 *  @name 画布函数
	 */
	GAF_CCanvas*		NewCanvas(GAF_DWindowHandle hWindow);
	bool			DeleteCanvas(GAF_CCanvas* pCanvas);

	// 图像函数
	/**
	 *  @name 图像函数
	 */
	GAF_DImageHandle	NewImage(
					const _STRING strPathName,
					UINT& _OUT nWidth,
					UINT& _OUT nHeight,
					GAF_SImageInfo& _OUT ii
				);
	GAF_DImageHandle	NewImage(
					const void* pData,
					const SIZET nSize,
					UINT& _OUT nWidth,
					UINT& _OUT nHeight,
					GAF_SImageInfo& _OUT ii
				);
	GAF_DImageHandle	NewImage(
					const UINT nWidth,
					const UINT nHeight,
					GAF_SImageInfo& _OUT ii
				);
	bool			GetImageInfo(
					GAF_DImageHandle hImage,
					UINT& _OUT nWidth,
					UINT& _OUT nHeight,
					GAF_SImageInfo& _OUT ii
				);
	bool			DeleteImage(GAF_DImageHandle hImage);

	// 音频函数
	/**
	 *  @name 音频函数
	 */
// 		GAF_CAudio*		CreateAudio(GAF_CBundle* pBundle = NULL);
// 		bool			PlayAudio(const _STRING strPathName, bool isLoop);
// 		void			DeleteAudio();

// 		// IO操作函数
// 		/**
// 		 *  @name IO操作函数
// 		 */

	// 平台其他功能函数
	/**
	 *  @name 平台其他功能函数
	 */
	GAF_DTimeTicks		GetTimeTicks();
	void			Delay(GAF_DTimeTicks ttSleep);

private:
	// 格式化SDL图像
	SDL_Surface*		SurfaceFormat(SDL_Surface* pSrc);

private:
	SDL_Surface*		m_pMainSurface;
};

#endif